import Package from './Package.js'

export default {
  uploadImages,
  uploadVideos,
  uploadFile,
}

/**
 * 上传图片调用方式
 * data.count       number 上传图片张数
 * data.sizeType    array  所选的图片的尺寸[原图，压缩图]
 * data.sourceType  array  选择图片的来源[相册，相机]
 * data.data        json   上传图片携带参数
 */
// uploadFile.uploadImages({
//   count: 3,//上传图片张数
//   uploadSuccess: function (res) {
//     // 上传回调。包括成功及失败
//     // res回调参数(json数组形式返回)
//     // 对应图片上传成功的对应数组元素包括width,height,pic
//     // 对应图片上传失败对应的数组元素为{}
//     console.log(res)
//   }
// })

/**
 * 上传视频调用方式
 * data.sourceType  array  选择视频的来源[相册，相机]
 * data.compressed  Bool   是否压缩所选择的视频文件
 * data.maxDuration number 拍摄视频最长拍摄时间，单位秒
 * data.data        json   上传图片携带参数
 */
// uploadFile.uploadVideos({
//   uploadSuccess: function(res) {
//     //上传回调。包括成功及失败
//     // res回调参数(object形式返回)
//     // 上传成功的res包括width,height,pic
//     // 上传失败的res={}
//     console.log(res)
//   }
// })

function getUsers(params) {
  const app = getApp();
  var temp = {};
  temp.user_id = app && app.userInfo && app.userInfo.user_id || "";
  if (app.clubUuid && !params.clubUuid) {
    temp.clubUuid = app.clubUuid;
  }
  if (app && app.userInfo && app.userInfo.moduleClassUuid) {
    temp.moduleClassUuid = app.userInfo.moduleClassUuid;
  }
  return temp;
}

function getServicesAddr() {
  return Package.getPackage().domain;
}

/**
 * 上传图片
 * data.count       number 上传图片张数
 * data.sizeType    array  所选的图片的尺寸[原图，压缩图]
 * data.sourceType  array  选择图片的来源[相册，相机]
 * data.data        json   上传图片携带参数
 */
function uploadImages(data = {}) {
  wx.chooseImage({
    count: data.count || 1,
    sizeType: data.sizeType || ['original', 'compressed'],
    sourceType: data.sourceType || ['album', 'camera'],
    success(res) {
      const tempFilePaths = res.tempFilePaths;

      wx.showLoading({
        title: '上传中',
      })
      debugger
      getImageInfo(data, tempFilePaths);
    }
  })
}

/**
 * 上传视频
 * data.sourceType  array  选择视频的来源[相册，相机]
 * data.compressed  Bool   是否压缩所选择的视频文件
 * data.maxDuration number 拍摄视频最长拍摄时间，单位秒
 * data.data        json   上传图片携带参数
 */
function uploadVideos(data = {}) {
  wx.chooseVideo({
    sourceType: data.sourceType || ['album', 'camera'],
    compressed: data.compressed || true,
    maxDuration: data.maxDuration || 60,
    success(res) {
      const width = res.width;
      const height = res.height;
      // 错误次数
      let errNum = 0;

      wx.showLoading({
        title: '上传中',
      })

      // 文件路径
      data.filePath = res.tempFilePath;

      // 上传文件成功
      data.success = function(res) {
        let temp = {
          video: res.data,
          width,
          height,
        }
        data.uploadSuccess(temp);
        wx.hideLoading();
      }
      // 上传文件失败
      data.fail = function(res) {

        // 重传一次
        if (errNum < 1) {
          uploadFile(data);
          errNum++;
        } else {
          let temp = {}
          data.uploadSuccess(temp);
          wx.hideLoading();
        }
      }

      // 上传文件
      uploadFile(data)
    }
  })
}

/**
 * 获取图片信息（宽高）
 */
function getImageInfo(data, tempFilePaths, index) {
  const that = this;
  index = index || 0;
  wx.getImageInfo({
    src: tempFilePaths[index],
    success(res) {
      const width = res.width;
      const height = res.height;
      // 错误次数
      let errNum = 0;

      // 文件路径
      data.filePath = tempFilePaths[index];

      // 上传文件成功
      data.success = function(res) {
        tempFilePaths[index] = {
          pic: res.data,
          width,
          height,
        }
        upLoadImgComplete(data, tempFilePaths, index)
      }
      // 上传文件失败
      data.fail = function(res) {

        // 重传一次
        if (errNum < 1) {
          uploadFile(data);
          errNum++;
        } else {
          tempFilePaths[index] = {}
          upLoadImgComplete(data, tempFilePaths, index)
        }
      }

      // 上传文件
      uploadFile(data)

    }
  })
}


/**
 * 上传文件回调
 */
function upLoadImgComplete(data, tempFilePaths, index) {
  index++;
  wx.showLoading({
    title: `已完成（${index}/${tempFilePaths.length}）`,
  })
  if (index == tempFilePaths.length) {
    data.uploadSuccess(tempFilePaths);
    wx.hideLoading();
  } else {
    getImageInfo(data, tempFilePaths, index)
  }
}

/**
 * 上传文件
 */
function uploadFile(data) {

  var reqData = data.data || {};
  Object.assign(reqData, getUsers(reqData) || {});

  getApp().uploadAliyun(
    data.filePath,
    function(res) {
      console.log("上传成功", res)
      // 成功返回
      if (data.success) data.success({data:res})
    },
    function(res) {
      console.log("上传失败")
      if (data.fail) data.fail({data:res})
    }
  )

  // wx.uploadFile({
  //   url: getServicesAddr() + 'upLoadImg', // 仅为示例，非真实的接口地址
  //   filePath: data.filePath,
  //   name: 'photo',
  //   formData: reqData,
  //   method: 'POST',
  //   success(res) {
  //     var firstChar = res.data.charAt(0);
  //     var lastChar = res.data.charAt(res.data.length - 1);
  //     if (firstChar == "{" && lastChar == "}") {
  //       res.data = JSON.parse(res.data);
  //       var resMessage = res.data[Package.getPackage().resMsgKey];
  //       var resStatus = res.data[Package.getPackage().resStatusKey];
  //       res.data.msg = resMessage;
  //       res.data.code = resStatus;
  //       if (resStatus == Package.getPackage().resStatus.ok) {
  //         // 成功返回
  //         if (data.success) data.success(res.data)
  //       } else {
  //         // 失败返回
  //         if (data.fail) data.fail(res.data)
  //       }

  //       if (data.complete) data.complete(res.data);
  //     } else {
  //       uploadFileFail(data)
  //     }

  //   },
  //   fail(res) {
  //     uploadFileFail(data)
  //   }
  // })
}

/**
 * 文件上传失败
 */
function uploadFileFail(data) {
  // 异常返回
  let temp = {
    msg: "上传失败",
    code: Package.getPackage().resStatus.error
  }
  if (data.fail) data.fail(temp);
  if (data.complete) data.complete(temp);
}